Apa Saja Visibility Specifiers?
Setelah dasar fungsi, kita masuk ke aspek akses (visibility) dan jenis fungsi khusus di Sui Move.
Visibility Fungsi
Visibility menentukan apakah suatu fungsi bisa dipanggil dari luar module tempat ia didefinisikan. Ada dua utama yang relevan saat ini: private (default) dan public
Private Function
Secara default fungsi bersifat private: hanya bisa dipanggil dari dalam module yang sama.
module examples::math {
public struct Numbers has key { id: UID, a: u8, b: u8 }
public fun new(a: u8, b: u8, ctx: &mut TxContext) {
let numbers = Numbers { id: object::new(ctx), a, b };
}
fun add(n: Numbers) {
let sum = n.a + n.b; // hanya bisa dipakai internal
}
}
fungsi add bersifat private.
Public Function
Menambahkan keyword public membuat fungsi bisa dipanggil module lain.
module examples::math {
public struct Numbers has key { id: UID, a: u8, b: u8 }
public fun new(a: u8, b: u8, ctx: &mut TxContext) { let numbers = Numbers { id: object::new(ctx), a, b }; }
public fun add(n: Numbers) { let sum = n.a + n.b; }
}
Sekarang add bisa diakses dari luar.
Entry Function
entry menandai fungsi yang dapat dipanggil langsung via transaksi (menjadi titik masuk eksekusi). Syarat:
- Diberi keyword
entry(bersamapublicbiasanya:public entry). - Tidak mengembalikan nilai.
- Parameter terakhir adalah referensi mutable ke
TxContext:&mut TxContext.
Contoh dari pola Hello World:
public entry fun mint(ctx: &mut TxContext) {
let object = HelloWorldObject {
id: object::new(ctx),
text: string::utf8(b"Hello World!")
};
transfer::public_transfer(object, tx_context::sender(ctx));
}
ctx memberi akses ke informasi pengirim. transfer::public_transfer menyimpan object ke global storage tanpa nilai balik.
Penutup
Memahami private, public, dan entry penting untuk mendesain API module yang aman dan ergonomis. Berikutnya kita akan dalami objek (object) di Sui Move.